查看原文
其他

小课堂:你还不知道正则表达式?怪不得效率那么低!

拉登Dony 拉小登 2022-06-30


今日目标:

了解什么是正则表达式

出道题,考考你。

上周我写了一篇文章《小课堂:简单5个设计技巧,教你做好Excel数据看板》,实际这是从油管上的一个视频翻译过来的。

我的英语水平基本靠有道词典维持,所以当时我想办法,把视频的字幕下载了下来,然后再对照文字+有道翻译。

字幕下载下来,格式是这样的。

然后,我就有了一个需求:怎么把文本中的序号、换行、时间戳都删掉,变成下面的样子?

我猜,很多Excel高手已经开始跃跃欲试了。

有人说用排序:

1- 复制粘贴到Excel中

2- 排序就可以了。

有人说用筛选:

1- 复制粘贴到Excel中。

2- 每4行循环填充1234的序号。

3- 最后筛选序号4,再复制粘贴出来。

这些方法都可以,不过我用了更简单的方法,一次复制粘贴就搞定了。

没错,图片中你看不懂的那些符号,但是一键整理不规则文本的那些符号,就是「正则表达式」

1- 什么是正则表达式

什么是正则表达式?百度百科给出的回答是这样的:

正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

翻译一下,你可以理解成是Excel中的通配符。

像下面这个查找替换,可以批量把_前面内容,批量删除掉。

但是,Excel中支持的通配符只有两种?和*,所以能够实现的查找规则也非常的有限。

而正则表达式,有几十种不同的“通配符”,代表不同的文本查找规则,可以实现各种复杂的文本查找、替换、删除。

就比如前面我们删除序号、时间戳、空行的案例。

2- 有哪些软件可以使用正则表达式

不过,不是所有的软件,都可以使用正则表达式,对于大部分人来说,能用正则表达式的软件中,最常见的就是Word!

在Word中,使用正则表达式

举个例子,想要快速删除文本中的数字和时间戳。只需要这样做:

1- 在Word中按下Ctrl+H,打开查找替换对话框。

2- 点击「更多」,打开更多选项。

3- 勾选「使用通配符」。

4- 查找内容输入[0-9,:->]

5- 替换为空,表示删除。

其中的「0-9,:->」表示0到9之间的任意数字,以及逗号、冒号、短横线、大于号。

相同的方法,我们把查找内容改成[A-z],就可以一键删除所有的英文字母。

在Sublime中,使用正则表达式

我平时用的最多的,还是Sublime。

- 一方面:Word中的正则表达式,并不是传统意义上的表达式,而是只适用于Word专用的一套适配规则。

- 另一方面:Word主要还是用来做文档,文本处理计算速度也不高,而Sublime是专门为了写代码设计的,没有样式的渲染,文本处理速度更快、更强!

- 而且,Sublime支持的「正则表达式」是正统的,学会之后,可以应用在其他所有地方。

使用的时候,只需要在Sublime中按下Ctrl+H,然后点击左边的「正则表达式」图表,就可以启用正则表达式匹配规则了。

在Excel中,使用正则表达式

很遗憾的是,Excel的查找替换,只支持问号和星号,并不支持正则表达式。

但同时又让人欣喜的是,Excel中的VBA是支持正则表达式的,只需要把下面这段点,复制粘贴到你的Excel中,就可以使用正则表达式了。

Function P_REG_REPLACE(ByVal txt As String, ByVal reg As String, Optional ByVal targetTxt As String = "")
  Dim regx
  Dim p As String
  Set regx = CreateObject("vbscript.regexp")
  With regx
      .Global = True
      .IgnoreCase = True
      .pattern = reg
  End With
       
  p = regx.Replace(txt, targetTxt)
   
  P_REG_REPLACE = p
  Set regx = Nothing
   
End Function

比如,我们要替换掉所有的数字,在粘贴完代码之后,那就直接输入P_REG_REPLACE函数:

对应公式如下:

=P_REG_REPLACE(A2,"[^\d]","")

大致意思如下:

- []中括号,代表查找括号中的任意字符。

- ^尖角号,表示取反,就所有不等于中括号中的字符。

- \d代表的是数字。

所以这串正则表达式的意思是,把所有非数字的文本,都替换为空,就只剩下了数字。

3- 正则表达式还能干点啥?

真正让我下决心好好学习一下正则表达式的,还是下面这些日常的、复杂的不规则文本处理需求。

用起来真的是太爽了,比Excel中又长又臭的函数公式,好用太多了。

下面是我百度出来的,Excel中提取数字的公式:

=-LOOKUP(1,-RIGHT(LEFT(B3,LOOKUP(10,--MID(B3,ROW($1:$20),1),ROW($1:$20))),ROW($1:$20)))

1- 提取英文

通过正则表达式,把非英文的字母替换掉,剩下的就是英文了。

公式如下:

=P_REG_REPLACE(A2,"[^A-z]","")

正则表达式的大致意思是,把所有非26个英文字母的文本,都替换为空白。

2- 提取数字

通过正则表达式,把非数字的字母替换掉,剩下的就是英文了。

公式在前面已经介绍过

3- 提取中文

提取中文也很简单,把所有的英文和数字都删除掉,就只剩下了中文。

公式如下:

=P_REG_REPLACE(A2,"[A-z\d]","")

中括号中的意思是,所有的英文字母和数字,把它们都替换为空白,自然就只剩下中文了。

更多正则表达式技巧

正则表达式,实际上要比这几个例子复杂很多,功能也强大很多。

文章篇幅有限,我也只是抛砖引玉,给大家推荐「菜鸟教程」中的教程。

https://www.runoob.com/regexp/regexp-syntax.html

点击「阅读原文」就可以直接跳转学习。

4- 小结

请你一定耐下心来,好好学习一下正则表达式。

- 方法没有对错之分。

- 你复制粘贴也是对的。

- 你百度使用复杂的长公式,也能解决问题。

逼着自己多学一点东西,比加上四五个Excel群,然后各种姿势「求大神」要管用。

既快又简单的解决问题,同时还能在人群中脱颖而出,何乐而不为呢!

下载案例

本节案例,以及公众号所有案例,都会上传到我的知识星球「拉小登Excel」。

扫描下面二维码,一次付费,获取有积累十年的Excel资料库!

后台回复「知识星球」,了解更多详细介绍。


我是拉小登,一个会设计表格的Excel老师



= = 推荐文章 = =

小课堂:简单5个设计技巧,教你做好Excel数据看板

小课堂:用Excel做一个超酷的预算和实际动态图表



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存